package com.wing.wecom.model.request;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.util.ArrayList;
import java.util.List;

/**
 * 审批Form
 *
 * @author
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class ApproveForm {

    /**
     * 事件名称：sys_approval_change
     */
    private String event;

    /**
     * 审批编号
     */
    private String spNo;

    /**
     * 审批申请类型名称（审批模板名称）
     */
    private String spName;

    /**
     * 申请单状态：1-审批中；2-已通过；3-已驳回；4-已撤销；6-通过后撤销；7-已删除；10-已支付
     */
    private Integer spStatus;

    /**
     * 审批模板id。可在“获取审批申请详情”、“审批状态变化回调通知”中获得，也可在审批模板的模板编辑页面链接中获得。
     */
    private String templateId;

    /**
     * 审批申请提交时间,Unix时间戳
     */
    private Integer applyTime;

    /**
     * 申请人信息
     */
    private Applyer applyer;

    /**
     * 审批流程信息，可能有多个审批节点。
     */
    private List<SpRecord> spRecords = new ArrayList<>();

    /**
     * 抄送信息，可能有多个抄送节点
     */
    private List<Notifyer> notifyers = new ArrayList<>();

    /**
     * 抄送信息，可能有多个抄送节点
     */
    private List<Comments> comments = new ArrayList<>();

    /**
     * 审批申请状态变化类型：1-提单；2-同意；3-驳回；4-转审；5-催办；6-撤销；8-通过后撤销；10-添加备注
     */
    private Integer statuChangeEvent;

    @Data
    public static class Applyer{

        /**
         * 申请人userid
         */
        private String userId;

        /**
         * 申请人所在部门pid
         */
        private Integer party;

    }

    @Data
    public static class SpRecord{

        /**
         * 审批节点状态：1-审批中；2-已同意；3-已驳回；4-已转审
         */
        private Integer spStatus;

        /**
         * 节点审批方式：1-或签；2-会签
         */
        private Integer approverAttr;

        /**
         * 审批节点详情。当节点为标签或上级时，一个节点可能有多个分支
         */
        private List<Details> details = new ArrayList<>();

        @Data
        public static class Details{

            /**
             * 分支审批人
             */
            private Approver approver;

            /**
             * 审批意见字段
             */
            private String speech;

            /**
             * 分支审批人审批状态：1-审批中；2-已同意；3-已驳回；4-已转审
             */
            private Integer spStatus;

            /**
             * 节点分支审批人审批操作时间，0为尚未操作
             */
            private Integer spTime;

            /**
             * 节点分支审批人审批意见附件，赋值为media_id具体使用请参考：文档-获取临时素材
             */
            private String attach;

            @Data
            public static class Approver{

                /**
                 * 分支审批人userid
                 */
                private String userId;

            }

        }

    }

    @Data
    public static class Notifyer{

        /**
         * 节点抄送人userid
         */
        private String userId;

    }

    @Data
    public static class Comments{

        /**
         * 备注人信息
         */
        private CommentUserInfo commentUserInfo;

        /**
         * 备注提交时间
         */
        private Integer commentTime;

        /**
         * 备注文本内容
         */
        private String commentContent;

        /**
         * 备注id
         */
        private String commentId;

        @Data
        public static class CommentUserInfo{

            /**
             * 备注人userid
             */
            private String userId;

        }

    }

    public interface Add{}

    public interface Update{}
}
